Skip to content

Conversation

Hubert-Szczepanski-SAP
Copy link
Contributor

What this PR does / why we need it:

Packing UI into OCM + publish.

I Added local tests with local registry.

task local:test-full-flow: is to create OCM package and then use it to host app locally within Docker.

Which issue(s) this PR fixes:
Fixes #

Special notes for your reviewer:

sbom: true
tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest,${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.event.inputs.nextVersion }}

- name: Install OCM CLI
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if we need this and installation below

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need this.

sbom: true
tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest,${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.event.inputs.nextVersion }}

- name: Install OCM CLI
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need this.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is no need for having a local and a remote descriptor. We just need one, the remote.

Taskfile.yml Outdated
- rm -rf {{.OCM_OUTPUT_DIR}}
- |
ocm add components --create --force --copy-resources \
--complete \
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
--complete \

We dont need the complete mark here.

Taskfile.yml Outdated
cmds:
- rm -rf {{.OCM_OUTPUT_DIR}}
- |
ocm add components --create --force --copy-resources \
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
ocm add components --create --force --copy-resources \
ocm add components --create \

Also we dont need to copy the resource, the image is already pushed to the oci ghcr repo

Taskfile.yml Outdated
Comment on lines 51 to 52
--copy-resources \
--enforce --overwrite \
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
--copy-resources \
--enforce --overwrite \

No need for copy-resources, the image is already in ghcr. This would copy it again.
Would prefer not to use --enforce and --overwrite to not overwrite a component for now.

Taskfile.yml Outdated
Comment on lines 57 to 90
test:inspect-ocm:
desc: "Inspects the locally built OCM component. Usage: task test:inspect-ocm -- <version>"
cmds:
- echo "--- Component Details ---"
- ocm get component -o yaml {{.OCM_COMPONENT_NAME}}:{{.OCM_COMPONENT_VERSION}} --repo {{.OCM_OUTPUT_DIR}}
- echo "\n--- Component Resources ---"
- ocm get resources -o wide {{.OCM_COMPONENT_NAME}}:{{.OCM_COMPONENT_VERSION}} --repo {{.OCM_OUTPUT_DIR}}
vars:
OCM_COMPONENT_VERSION: '{{.CLI_ARGS}}'

test:build-image:
desc: "Builds the docker image for local testing. Usage: task test:build-image TAG=v-local-test"
cmds:
- docker build -t {{.DOCKER_IMAGE}} .

test:publish-image:
desc: "Publishes the docker image for local testing. Usage: task test:publish-image TAG=v-local-test"
cmds:
- docker push {{.DOCKER_IMAGE}}

test:run:
desc: "Runs the locally built image in a docker container. Usage: task test:run TAG=v-local-test"
cmds:
- docker run --rm -p 3000:3000 {{.DOCKER_IMAGE}}

test:run-from-ocm:
desc: "Extracts image reference from OCM component and runs it. Usage: task test:run-from-ocm -- <version>"
cmds:
- |
IMAGE_REF=$(ocm get resources {{.OCM_COMPONENT_NAME}}:{{.OCM_COMPONENT_VERSION}} --repo {{.OCM_OUTPUT_DIR}} -o json | jq -r '.items[0].element.access.imageReference')
echo "Running image from OCM component: $IMAGE_REF"
docker run --rm -p 5173:5173 --env-file {{.ROOT_DIR}}/.env $IMAGE_REF
vars:
OCM_COMPONENT_VERSION: '{{.CLI_ARGS}}'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would prefer to call this not test: as this is more a reserved word for test runs.

Maybe lets call it build:image:local.
Would also rename test:run to run:image:local or similar.

We also don't need the action test:run-from-ocm.

Taskfile.yml Outdated
Comment on lines 92 to 144
local:start-registry:
desc: "Starts a local Docker registry on localhost:5000"
cmds:
- docker run -d -p 5000:5000 --name registry --rm registry:2
status:
- docker ps | grep -q registry

local:stop-registry:
desc: "Stops the local Docker registry"
cmds:
- docker stop registry
ignore_error: true

local:build-and-push:
desc: "Builds and pushes image to local registry. Usage: task local:build-and-push TAG=v0.0.1"
cmds:
- docker build -t localhost:5000/mcp-ui-frontend:{{.TAG}} .
- docker push localhost:5000/mcp-ui-frontend:{{.TAG}}
vars:
TAG: '{{.TAG | default "latest"}}'

local:build-ocm:
desc: "Builds OCM component with local registry reference (uses --skip-digest-generation for local testing). Usage: task local:build-ocm -- <version>"
cmds:
- rm -rf {{.OCM_OUTPUT_DIR}}
- |
ocm add components --create --force --skip-digest-generation \
--file {{.OCM_OUTPUT_DIR}} \
{{.OCM_DESCRIPTOR_LOCAL}} -- \
VERSION={{.OCM_COMPONENT_VERSION}} \
COMPONENT_NAME={{.OCM_COMPONENT_NAME}} \
PROVIDER={{.OCM_PROVIDER}}
vars:
OCM_COMPONENT_VERSION: '{{.CLI_ARGS}}'

# This is full workflow to create local registry, build, push, create OCM and run application locally.

local:test-full-flow:
desc: "Full local test: start registry, build, push, create OCM, run. Usage: task local:test-full-flow TAG=v0.0.1"
cmds:
- task: local:start-registry
- task: local:build-and-push
vars:
TAG: "{{.TAG}}"
- task: local:build-ocm
vars:
CLI_ARGS: "{{.TAG}}"
- task: test:inspect-ocm
vars:
CLI_ARGS: "{{.TAG}}"
- task: test:run-from-ocm
vars:
CLI_ARGS: "{{.TAG}}" No newline at end of file
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lets remove this local registry part. We don't need this.

Dockerfile Outdated

# Build
ENV NODE_ENV=production
ENV NODE_OPTIONS=--max-old-space-size=4096
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it without not working? Why we need to change the Dockerfile?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It was not working for me when I was trying to deploy it locally

Taskfile.yml Outdated
Comment on lines 11 to 13
LOCAL_REGISTRY: localhost:5000
LOCAL_IMAGE_NAME: mcp-ui-frontend
LOCAL_DOCKER_IMAGE: "{{.LOCAL_REGISTRY}}/{{.LOCAL_IMAGE_NAME}}:{{.IMAGE_TAG}}"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
LOCAL_REGISTRY: localhost:5000
LOCAL_IMAGE_NAME: mcp-ui-frontend
LOCAL_DOCKER_IMAGE: "{{.LOCAL_REGISTRY}}/{{.LOCAL_IMAGE_NAME}}:{{.IMAGE_TAG}}"

You dont need to add a local registry & image for building the ocm component locally. You can just use the oci image from remote and build it locally with the remote image.

Taskfile.yml Outdated
OCM_TARGET_REPO: '{{.OCM_TARGET_REPO | default (print .REGISTRY "/components") }}'
OCM_OUTPUT_DIR: "{{.ROOT_DIR}}/.ctf"
OCM_DESCRIPTOR: "{{.ROOT_DIR}}/ocm/component-descriptor.yaml"
OCM_DESCRIPTOR_LOCAL: "{{.ROOT_DIR}}/ocm/component-descriptor-local.yaml"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
OCM_DESCRIPTOR_LOCAL: "{{.ROOT_DIR}}/ocm/component-descriptor-local.yaml"

Taskfile.yml Outdated

vars:
# Variables for Docker image
REGISTRY: ghcr.io/openmcp-project
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
REGISTRY: ghcr.io/openmcp-project
REGISTRY: {{.REGISTRY | default (print "ghcr.io/openmcp-project") }}

Lets do it like this. So someone can override the registry locally if he/she wants to.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants